home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / numericargument.fpl.readme < prev    next >
Text File  |  1995-08-01  |  4KB  |  114 lines

  1. #############################################################################
  2. File:        NumericArgument
  3. Author:        Jesper Skov
  4. Email:        jskov@iesd.auc.dk
  5. Short:        Repeats or calls a function with argument
  6. Version:    1.0
  7. Date:        25.02.95
  8. Local settings:
  9. Global settings:(__NumArg FPL variable)
  10. Keysequence:    Control u (C-u)
  11. Type:        function/key
  12. Prereq:
  13. Copyright:    © 1995, Jesper Skov
  14. #############################################################################
  15.  
  16. FUNCTION
  17.   **** WARNING ****
  18.   You may create havoc with this function. Try using the function on trash
  19.   data BEFORE installing it in your USER.FPL file... I mean, some things
  20.   like »C-u (open file)« is cute - open four files.... BUT, how about
  21.   »C-u C-u <OOPS>« - that equals 16 times Murphy! Read this document
  22.   carefully. The author takes NO responsbility for trashed
  23.   <insert appropriate>!!!!!!
  24.   **** WARNING ****
  25.  
  26.   With this function you can get the function assigned to a key repeated a
  27.   number of times, or call it once with an numeric argument. If you do not
  28.   know Emacs you may find this concept a bit weird, but it does come in handy 
  29.   from time to time :)
  30.   There is two types of operation, both started in the same way... It is 
  31.   quite tricky to explain, so please bear with me! OK? Here goes:
  32.  
  33.     1) C-u (invoke this function)
  34.        At this point the default argument is set to four (4).
  35.  
  36.     2) C-u is pressed 0, 1 or more times again, followed by a non-number key
  37.        (i.e. not keys 0-9). Each time the C-u is pressed, the argument is 
  38.        multiplied with four. When a new key (non-number) is pressed, operation
  39.        is continued in state 4. IF a number key IS pressed, we go to state 3!
  40.  
  41.     3) Here you may enter a specific number, using the keys 0..9! On C-u, 
  42.        argument input is stopped, and the next key you press will be used in 
  43.        state 4. This allows you to repeat number keys as well! (And C-u... Be
  44.        careful!)
  45.  
  46.     4) In this state a choice is made. The last key pressed has to be either 
  47.        repeated OR called with the argument. The routine decides by examining 
  48.        the execute string assigned to the key. If it contains the variable
  49.        __NumArg, the string is executed ONCE, with the argument in the 
  50.        __NumArg variable (more about this below). Otherwise the string is 
  51.        executed (arg) times.
  52.  
  53.   In general: The status line reflect the current numeric argument.
  54.               __NumArg will be 0 (NULL) outside of argument executions.
  55.               You may break operation at any time with Control g - EXCEPT if
  56.                you have a function on C-g!!!!! Be careful!
  57.  
  58.   Some examples (of usage... Se below for programming examples):
  59.     C-u bs                : Backspaces four times
  60.     C-u 12 TAB            : Inserts 12 tabs
  61.     C-u 12 C-u 2        : Inserts the letter 2, 12 times (222222222222)
  62.     C-u C-u C-u    1 a        : Inserts one a
  63.     C-u C-u C-u C-u a    : Inserts 128 a's!!!!!!! Be carefull with many C-u's!!
  64.  
  65.  
  66.   Constructing functions which takes input:
  67.  
  68.   Now, if you want a "key function" to rely on this numeric argument form,
  69.   simply let it include the variable. E.g.:
  70.  
  71.   AssignKey("CursorDown(__NumArg);", "control a");
  72.  
  73.   * This will move the cursor 4 steps down on »C-u C-a«. If there is no 
  74.     argument (C-a) the cursor will not move. »C-u C-u C-u C-u C-u C-u C-u
  75.     C-u C-a« would bring the cursor to the bottom of the buffer in most of 
  76.     the programs you're able to write in a week or two (or so I reckon. Could 
  77.     be that I'm just too lazy.... Who knows =)
  78.  
  79.  
  80.   But remeber that only the key's execute string is checked! If you use the 
  81.   __NumArg variable in your routine (without sending it as an argument) you
  82.   could do this:
  83.  
  84.   void export myFunc(){...};
  85.   ...
  86.   AssignKey("myFunc();/*__NumArg*/", "control a");
  87.  
  88.   A specific use of this would probably be a routine which takes EITHER a 
  89.   numeric argument OR does some fetching itself. Example:
  90.  
  91.   SetWallRight(){ // if no "argument", check the current cursor position.
  92.   if (!(localArg=__NumArg)){
  93.     localArg = ReadInfo("column");}
  94.   <make use of localArg>}
  95.   AssignKey("SetWallRight();/*__NumArg*/", "control a");
  96.  
  97.   This way a /*__NumArg*/ may be read as an optional numeric argument.
  98.  
  99.   Do note that you should *never* assign values to __NumArg yourself!!!
  100.  
  101.  
  102.  
  103. HISTORY (REV)
  104.   25.02.95 (0) Working...
  105.  
  106. BUGS
  107.   Not as far as I know!
  108.  
  109. TODO
  110.  
  111. SEE ALSO
  112.   Ole L. Madsen+'s "Object-Oriented Programming in the Beta P.L." (ISBN:0-201-62430-3)
  113.   (There's a freak language for ya! =)
  114.